#include "graphics.opengl/query.h"

namespace dw
{
	namespace graphics
	{
		namespace opengl
		{

			Query::Query(const Type type)
			{
				glGenQueriesARB(1, &_glId);
			}

			Query::~Query()
			{
				glDeleteQueriesARB(1, &_glId);
			}

			void Query::dispose()
			{
				delete this;
			}

			void Query::begin()
			{
				glBeginQueryARB(getGLType(), _glId);
			}

			void Query::end()
			{
				glEndQueryARB(getGLType());
			}

			uint32 Query::getResult() const
			{
				uint32 nrv;
				glGetQueryObjectuivARB(_glId, GL_QUERY_RESULT_ARB, &nrv);
				return nrv;
			}

			IQuery::Type Query::getType() const
			{
				return _type;
			}

			GLenum Query::getGLType() const
			{
				switch (_type)
				{
				case SAMPLES_PASSED	: return GL_SAMPLES_PASSED_ARB; break ;
				default							: return GL_ZERO;
				}
			}

		} // namespace opengl
	} // namespace graphics
} // namespace dw